2019 Spring 40623217 Personal Website

human and human << Previous Next >> computer and computer

human and computer

file download address : https://drive.google.com/file/d/1OZNJWb5ipTxwpeXnJ7E9Jkpu8Z0K3Pvf/view?usp=sharing

process explanation

上圖所示:

velocity = 0 是要求 init 要輸入速度的這個條件給系統。

sliding_b = 0 也跟上方的velocity = 0 概念是一樣的要輸入給系統。

sim.getOjectHandle ('  ') 是指處理物件的相關。

sim.setJointTargetPosition(  ,  )  是指設定軸的目標位置(上方處理完的物件  ,  給予速度或是其他的條件 )。

上圖所示:

message,auxiliaryData=sim.getSimulatorMessage() 是指  訊息 , 輔助參數或是數據 = 模擬得到模擬器訊息。

while message ~= -1 do  是指當訊息為非 -1 得做以下的。

key=auxiliaryData[1] 是指 key = 輔助數據陣列 [1],
sim.addStatusbarMessage('key:'..key) 是指模擬時新增狀態訊息為 key在下方狀態顯示。

velocity = 速度大小 ( 負號單純是指方向 )。

if (auxiliaryData[1]==97) then
-- left key
    if (sliding_b >= 0.2) then 
    else sliding_b = sliding_b + 0.05
sim.addStatusbarMessage('sliding_b:'..sliding_b)
    end
end

if (假設輔助數據等於按鍵 = true時) then (接著)

   [ if (假設sliding_b >= 0.2 =true時) then (接著)

        [執行某事要求]

    else (如果上方假設 = false ,要求 slideing_b = sliding_b +0.05平移位移)

模擬新增狀態訊息sliding_b的狀態在下方訊息欄呈現。

    end(結束此迴圈) ]

end(結束回圈)。

上圖所示:

message,auxiliaryData=sim.getSimulatorMessage() 是指從上方的這行指令到下方這行指令之間的所有程式皆啟用  訊息 , 輔助數據 = 模擬時得到模擬器的訊息。

position_PR=sim.getObjectPosition(right_pole_r1,-1)
position_S=sim.getObjectPosition(Sphere_handle,-1)
X = position_S[1] - position_PR[1]
Y = position_S[2] - position_PR[2] 
if 1 then
    if X <= -0.05 then --goalkeeper
        sim.setJointTargetVelocity(right_joint_r1,-5)
    elseif X > -0.05 then
        sim.setJointTargetVelocity(right_joint_r1,5)
    end
    Y = Y*5
    sim.setJointTargetVelocity(right_slider_r1,Y)
end

桿子位置 = 模擬得到物件位置(處理的物件 , -1啟動)。

球的位置 = 模擬得到物件位置(處理的物件 , -1啟動)。

X = 球的位置 - 桿件的位置 (在X軸上)。

Y = 球的位置 - 桿件的位置 (在Y軸上)。

if (假設 1 = true) then (接著)

   [ if (假設X <= -0.05) 接著

        模擬設定軸的目標速度 ( 處理後的物件 , 速度大小(負號是指方向))

    elseif (額外假設 X > -0.05) 接著

        模擬設定軸的目標速度 (處理後的物件 , 速度大小)

    end (結束此迴圈) ]

    Y = 上方 Y軸的位置差  *  上5倍

    模擬設定軸的目標速度 (處理後的物件 , 為上方 Y 的追蹤速度)

end (結束迴圈)。

以上方兩張圖所示:

position_PR=sim.getObjectPosition(right_pole_r2,-1)
position_S=sim.getObjectPosition(Sphere_handle,-1)
X = position_S[1] - position_PR[1]
Y = position_S[2] - position_PR[2] + 0.1
Y2 = position_S[2] - position_PR[2] - 0.1
if X >= -1 then --goalkeeper
   if position_S[2] <= 0.1 then
        if X <= -0.05 then
            sim.setJointTargetVelocity(right_joint_r2,-5)
        elseif X > -0.05 then
            sim.setJointTargetVelocity(right_joint_r2,5)
        end
        Y = Y*5
        sim.setJointTargetVelocity(right_slider_r2,Y)
    elseif position_S[2] > 0.1 then
        if X <= -0.05 then
            sim.setJointTargetVelocity(right_joint_r2,-5)
        elseif X > -0.05 then
            sim.setJointTargetVelocity(right_joint_r2,5)
        end
        Y2 = Y2*5
        sim.setJointTargetVelocity(right_slider_r2,Y2)
    end
end

桿子位置 = 模擬得到物件位置(處理的物件 , -1啟動)。

球的位置 = 模擬得到物件位置(處理的物件 , -1啟動)。

X = 球的位置 - 桿件的位置 (在X軸上)。

Y = 球的位置 - 桿件的位置再+ 0.1(在Y軸上)。

Y2= 球的位置 - 桿件的位置再 - 0.1(在Y軸上)。

if (假設X>= -1  = true ) then (接著)

   { if (假設球在Y軸時 <= 0.1 = true) then (接著)

       [ if (假設X <= -0.05時 = true) then (接著)

            模擬設定軸的目標速度(處理後的物件 , 速度大小(負號為方向))

        elseif (額外假設X> -0.05時 = true ) then (接著)

            模擬設定軸的目標速度(處理後的物件 , 速度大小)

        end (結束此迴圈) ]

        Y = 上方Y在Y軸的位置差*5倍

        模擬設定的目標速度(處理後的物件 , Y的追蹤速度大小)

    elseif (額外假設求在Y軸上 > 0.1) then (接著)

       [ if (假設X <= -0.05時 = true) then (接著)

            模擬設定軸的目標速度(處理後的物件 , 速度大小(負號為方向))

        elseif (額外假設X> -0.05時 = true ) then (接著)

            模擬設定軸的目標速度(處理後的物件 , 速度大小)

        end (結束此迴圈) ]

        Y2 = 上方Y2 在Y軸位置差* 5倍

        模擬設定軸的目標速度(處理後的物間 , 上方 Y2 追蹤的速度大小)

    end (結束此迴圈) }

end(結束迴圈)。


human and human << Previous Next >> computer and computer